1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect.testing;
18
19 import com.google.common.collect.testing.DerivedCollectionGenerators.Bound;
20 import com.google.common.collect.testing.DerivedCollectionGenerators.SortedMapSubmapTestMapGenerator;
21 import com.google.common.collect.testing.features.CollectionFeature;
22 import com.google.common.collect.testing.features.Feature;
23 import com.google.common.collect.testing.testers.SortedMapNavigationTester;
24
25 import junit.framework.TestSuite;
26
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Map.Entry;
32 import java.util.Set;
33
34
35
36
37
38 public class SortedMapTestSuiteBuilder<K, V> extends MapTestSuiteBuilder<K, V> {
39 public static <K, V> SortedMapTestSuiteBuilder<K, V> using(
40 TestSortedMapGenerator<K, V> generator) {
41 SortedMapTestSuiteBuilder<K, V> result = new SortedMapTestSuiteBuilder<K, V>();
42 result.usingGenerator(generator);
43 return result;
44 }
45
46 @Override protected List<Class<? extends AbstractTester>> getTesters() {
47 List<Class<? extends AbstractTester>> testers = Helpers.copyToList(super.getTesters());
48 testers.add(SortedMapNavigationTester.class);
49 return testers;
50 }
51
52 @Override public TestSuite createTestSuite() {
53 if (!getFeatures().contains(CollectionFeature.KNOWN_ORDER)) {
54 List<Feature<?>> features = Helpers.copyToList(getFeatures());
55 features.add(CollectionFeature.KNOWN_ORDER);
56 withFeatures(features);
57 }
58 return super.createTestSuite();
59 }
60
61 @Override
62 protected List<TestSuite> createDerivedSuites(FeatureSpecificTestSuiteBuilder<?,
63 ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>> parentBuilder) {
64 List<TestSuite> derivedSuites = super.createDerivedSuites(parentBuilder);
65
66 if (!parentBuilder.getFeatures().contains(NoRecurse.SUBMAP)) {
67 derivedSuites.add(createSubmapSuite(parentBuilder, Bound.NO_BOUND, Bound.EXCLUSIVE));
68 derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.NO_BOUND));
69 derivedSuites.add(createSubmapSuite(parentBuilder, Bound.INCLUSIVE, Bound.EXCLUSIVE));
70 }
71
72 return derivedSuites;
73 }
74
75 @Override protected SetTestSuiteBuilder<K> createDerivedKeySetSuite(
76 TestSetGenerator<K> keySetGenerator) {
77 return keySetGenerator instanceof TestSortedSetGenerator
78 ? SortedSetTestSuiteBuilder.using((TestSortedSetGenerator<K>) keySetGenerator)
79 : SetTestSuiteBuilder.using(keySetGenerator);
80 }
81
82
83
84
85
86 enum NoRecurse implements Feature<Void> {
87 SUBMAP,
88 DESCENDING;
89
90 @Override
91 public Set<Feature<? super Void>> getImpliedFeatures() {
92 return Collections.emptySet();
93 }
94 }
95
96
97
98
99
100
101
102
103 final TestSuite createSubmapSuite(final FeatureSpecificTestSuiteBuilder<?,
104 ? extends OneSizeTestContainerGenerator<Map<K, V>, Entry<K, V>>>
105 parentBuilder, final Bound from, final Bound to) {
106 final TestSortedMapGenerator<K, V> delegate
107 = (TestSortedMapGenerator<K, V>) parentBuilder.getSubjectGenerator().getInnerGenerator();
108
109 List<Feature<?>> features = new ArrayList<Feature<?>>();
110 features.add(NoRecurse.SUBMAP);
111 features.addAll(parentBuilder.getFeatures());
112
113 return newBuilderUsing(delegate, to, from)
114 .named(parentBuilder.getName() + " subMap " + from + "-" + to)
115 .withFeatures(features)
116 .suppressing(parentBuilder.getSuppressedTests())
117 .createTestSuite();
118 }
119
120
121 SortedMapTestSuiteBuilder<K, V> newBuilderUsing(
122 TestSortedMapGenerator<K, V> delegate, Bound to, Bound from) {
123 return using(new SortedMapSubmapTestMapGenerator<K, V>(delegate, to, from));
124 }
125 }